package com.github.kezhenxu94.playground.java.miscellaneous;

import org.junit.Test;

/**
 * Created by com.ikezhenxu.java.study on 4/3/15.
 */
public class OddInteger {

	/**
	 * 当创建Integer对象时，Integer i = 1;
	 * java默认调用Integer的valueOf()方法来创建对象，
	 *
	 * @see Integer#valueOf(int)
	 * 而该方法使用了一个IntegerCache来缓存数据，
	 * 缓存数据的范围默认为－128到＋127，
	 * 也可在启动虚拟机时配置参数-XX:AutoBoxCacheMax=size
	 * 通过size指定缓存的范围，
	 * 如-XX:AutoBoxCacheMax=32767
	 */
	@Test
	public void oddIntegerObj () {
		Integer mInteger1 = 1;
		Integer mInteger2 = 1;
		Integer mInteger3 = 127;
		Integer mInteger4 = 127;
		Integer mInteger5 = 128;
		Integer mInteger6 = 128;
		System.out.println ( mInteger1 == mInteger2 );
		System.out.println ( mInteger3 == mInteger4 );
		System.out.println ( mInteger5 == mInteger6 );
	}

	/**
	 * 类型提升，扩展问题
	 * 当原来类型为有符号数时，在提升类型时将扩展符号位。
	 * 当原来类型为无符号数时，在提升类型时将扩展零。
	 * <p/>
	 * 例子1：( int ) ( char ) ( byte ) ( - 1 )
	 * －1 byte 类型的补码为 1111 1111
	 * 在提升为 char 类型时做符号位扩展（因为 byte 为有符号数），
	 * 变成 1111 1111 1111 1111
	 * 而 char 在提升为 int 时，由于 char 原来为无符号数（0～127），
	 * 所以做 0 扩展，变成 0000 0000 0000 0000 1111 1111 1111 1111
	 * 即65535
	 * <p/>
	 * 例子2：( int ) ( byte ) ( - 1 )
	 * －1 byte 类型的补码为 1111 1111
	 * 直接提升为 int 时，做符号位扩展，变成 1111 1111 1111 1111 1111 1111 1111 1111
	 * 还是 －1 （补码表示）
	 */
	@SuppressWarnings("cast")
	@Test
	public void oddCast () {
		System.out.println ( ( int ) ( char ) ( byte ) ( - 1 ) );
		System.out.println ( ( int ) ( byte ) ( - 1 ) );
	}
}



















